import axios from 'axios'
import { ElMessage } from 'element-plus'

// 创建axios实例
const request = axios.create({
    baseURL: '/api',
    timeout: 10000
})

// 请求拦截器
request.interceptors.request.use(
    config => {
        // 根据请求类型添加token
        const isAdmin = config.url.startsWith('/admin')
        const token = isAdmin
            ? localStorage.getItem('adminToken')
            : localStorage.getItem('userToken')

        if (token) {
            // 添加token到请求头
            if (isAdmin) {
                // 管理员token
                config.headers['token'] = token
                console.log('[请求拦截器] 添加管理员token到请求头(token):', token)
            } else {
                // 用户token
                config.headers['authentication'] = token
                console.log('[请求拦截器] 添加用户token到请求头(authentication):', token)
            }
        } else {
            console.warn('[请求拦截器] 没有找到有效token，请求路径:', config.url)
        }

        // 对于GET请求，将params为null或undefined的属性删除
        if (config.method === 'get' && config.params) {
            Object.keys(config.params).forEach(key => {
                if (config.params[key] === null || config.params[key] === undefined || config.params[key] === '') {
                    delete config.params[key]
                }
            })
        }

        console.log('[请求拦截器] 发送请求:', config.method, config.url, '参数:', config.params || config.data, '请求头:', config.headers)
        return config
    },
    error => {
        console.error('[请求拦截器] 请求错误', error)
        return Promise.reject(error)
    }
)

// 响应拦截器
request.interceptors.response.use(
    response => {
        console.log('[响应拦截器] 收到响应:', response.config.url, '状态码:', response.status)
        console.log('[响应拦截器] 原始响应数据:', response.data)
        const res = response.data

        // 成功
        if (res.code === 1) {
            console.log('[响应拦截器] 请求成功，返回数据:', res.data)
            return res
        }

        // token失效
        if (res.code === 0 && (res.msg && (res.msg.includes('token') || res.msg.includes('登录')))) {
            console.error('[响应拦截器] Token失效或未登录:', res.msg)
            ElMessage.error('登录已过期，请重新登录')
            // 清除token
            localStorage.removeItem('userToken')
            localStorage.removeItem('adminToken')
            // 跳转到登录页
            setTimeout(() => {
                window.location.href = '/login'
            }, 1500)
        } else {
            // 其他错误
            console.error('[响应拦截器] 请求失败，错误信息:', res.msg, '响应码:', res.code)
            ElMessage.error(res.msg || '请求失败')
        }
        return Promise.reject(new Error(res.msg || '请求失败'))
    },
    error => {
        console.error('[响应拦截器] 请求错误', error)
        if (error.response) {
            console.error('[响应拦截器] 错误响应状态码:', error.response.status)
            console.error('[响应拦截器] 错误响应数据:', error.response.data)
        }

        // 处理网络错误
        if (error.message && error.message.includes('Network Error')) {
            ElMessage.error('网络错误，请检查网络连接')
        } else if (error.message && error.message.includes('timeout')) {
            ElMessage.error('请求超时，请稍后重试')
        } else if (error.response && error.response.status === 401) {
            ElMessage.error('登录已过期，请重新登录')
            localStorage.removeItem('userToken')
            localStorage.removeItem('adminToken')
            setTimeout(() => {
                window.location.href = '/login'
            }, 1500)
        } else {
            ElMessage.error(error.message || '请求失败')
        }
        return Promise.reject(error)
    }
)

/**
 * 用户登录
 * @param {Object} data - 登录信息 
 * @returns {Promise}
 */
export function userLogin(data) {
    return request({
        url: '/user/login',
        method: 'post',
        data
    }).then(res => {
        console.log('登录响应:', res)
        // 确保返回正确的数据
        return res.data || res
    })
}

/**
 * 管理员登录
 * @param {Object} data - 登录信息
 * @returns {Promise}
 */
export function adminLogin(data) {
    return request({
        url: '/admin/login',
        method: 'post',
        data
    }).then(res => {
        console.log('管理员登录响应:', res)
        return res.data || res
    })
}

/**
 * 用户注册
 * @param {Object} data - 注册信息
 * @returns {Promise}
 */
export function userRegister(data) {
    return request({
        url: '/user/register',
        method: 'post',
        data
    }).then(res => res.data || res)
}

export default request